package com.mes.cotask.manager.iface;


import com.mes.cotask.domain.Cotask;
import com.mes.task.domain.OperationTask;

import java.util.List;

import com.mes.common.manager.iface.IBasicManager;

public interface ICotaskManager extends IBasicManager<Cotask> {

	/**
	 * 通过传入的taskuid判断是否存在当前记录，taskuid与cotaskuid的关系是多对一
	 * @param taskUid string 
	 * @return boolean 如果存在返回true,否则false
	 * @author 
	 * */
	public boolean isExistByTaskuid(String taskUid) throws Exception;
	
	/**
	 * 通过出入的cotask对象找到所有子任务
	 * @param cotask Cotask
	 * @return taskList LinkedList
	 * @author 
	 * **/
	public List<OperationTask> getAllSubTasks(Cotask cotask) throws Exception;
	
	/**
	 * 通过入库生成的cotask对象，实现自动协调。
	 * @param cotask Cotask
	 * @author 
	 * */
	public void autoConfirm(Cotask cotask) throws Exception;
	
	/**
	 * 更新cotask,并与调度器进行协调，发送事件
	 * @param cotasks List<Cotask>
	 * @author 
	 * */
	public void updateCotaskToScheduler(List<Cotask> cotasks) throws Exception;
	
	/**
	 * 根据传入的opTask产生协作任务。初始状态为0：草稿
	 * @param opTask OperationTask
	 * @author 
	 * */
	public Cotask generateCotaskByTask(String taskUid) throws Exception;

	/**
	 * @author 
	 * @param allSubTask 所有协作任务的子任务List<OperationTask>
	 * 通过工艺模板分级协作任务，产生派工的信息
	 * */
	public boolean generateTasksByRoutineTemplate(OperationTask operationTask) throws Exception;
	
//	/**
//	 * 定时触发或者实时计算协作履约率的各种数值。
//	 * @author 
//	 * */
//	public void calculatePerformanceRate() throws Exception;
	
//	/**
//	 * 实时获取当前传入部门的当前月份的协作履约率
//	 * @param deptId
//	 * @author 
//	 * @return String[4] 1:总任务数；2：做计划数；3：超期数；4：惩罚次数；5：协作履约率 
//	 * */
//	public String[] calculateSingleDeptPerformance(String deptId) throws Exception;

	/**
	 * 强制完成协作任务
	 * */
	public void forceFinishCotask(String cotaskUid) throws Exception;
	
	/**
	 * 分批处理,不能static，调用了别的函数。 分批规则更改，这里必须重新开始应用
	 * 
	 * @param partNumber
	 * @param batchnum
	 * @throws Exception
	 */
	public void splitCotask(String partNumber, String batchnum) throws Exception;
	
}
